import java.util.Stack;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param pushV int整型一维数组
     * @param popV int整型一维数组
     * @return bool布尔型
     */
    //牛客 JZ31
      /*输入两个整数序列，第一个序列表示栈的压入顺序，请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。
      例如序列1,2,3,4,5是某栈的压入顺序，序列4,5,3,2,1是该压栈序列对应的一个弹出序列，但4,3,5,1,2就不可能是该压栈序列的弹出序列。*/
    public boolean IsPopOrder (int[] pushV, int[] popV) {
        // write code here
        Stack <Integer>stack=new Stack();
        int length=pushV.length;
        int i=0;
        int j=0;
        while(i<length){
            if(stack.isEmpty()){
                stack.push(pushV[i]);
                i++;
                if(stack.peek()==popV[j]){
                    while(!stack.isEmpty()){
                        if(stack.peek()==popV[j]){
                            j++;
                            stack.pop();
                        }else{
                            break;
                        }
                    }
                }

            }else{
                if(stack.peek()==popV[j]){
                    while(!stack.isEmpty()){
                        if(stack.peek()==popV[j]){
                            stack.pop();
                            j++;
                        }else{
                            break;
                        }
                    }
                }else{
                    stack.push(pushV[i]);
                    i++;
                }
            }
        }
        while(!stack.empty()){
            if(stack.pop()!=popV[j]){
                return false;
            }
            j++;
        }

        return true;
    }
}
